%{
#include "parser.h"
extern int yyerror ( char* message );


int estSpecial = 0;
char* expreg;
extern int nombreDeCaractere;
extern int nombreDeLigne;

/*
	Le fichier.l qu'on recupere en entrée formé de trois blocs (BLOC1,2,3) essentiels et un bloc(BLOC1_2) de transition. Dans ce bloc on définit les variables d'environnements, les blocs.

	Dans le premier bloc, on doit copier tout ce qu'on trouve dans une file, pour qu'on le puisse mettre dans le fichier généré. Faute de temps et d'organisation, on n'a pas réalisé cette tâche.

	Dans le deuxieme bloc, on doit minutieusement analyser et capter les expressions regulieres, et envoyer ses codes C, C++ associés dans la file

	Et ensuite, on recopie l'integralement le bloc 3


*/
%}

%x EXP_REG
%x BLOC1
%x BLOC1_2
%x BLOC2
%x BLOC3
%x REGLE
%x SEP

%%

"%{"		{
			BEGIN BLOC1;
		}


<BLOC1>"%}"	{
			BEGIN BLOC1_2;
		}

<BLOC1>\n 	{
			nombreDeCaractere++;
			nombreDeLigne++;
			//copie dans la file
			return codeC; 
		}



<BLOC1>. 	{
			//n'importe quel caractere trouvé dans
			//le bloc1
			//recoupie dans la file
			return codeC; 
		}




<BLOC1_2>"%%"	{
			BEGIN BLOC2; 
			printf("Debut BLOC2\n");	
			return dblePrc;
		}


<BLOC2>"%%"	{
			BEGIN BLOC3;
			printf("Fin BLOC2\n");
			return dblePrc;
		}

<BLOC2>[ \t]*	{	//separateur: espace ou tabulation
			return sep;
		}

<BLOC2>[\n]*	{
			return nvlle_ligne;
		}

<BLOC2>"{"	{	
			return acc_ouv;
		}

<BLOC2>"}"	{	
			return acc_fer;
		}

<BLOC2>.	{	
			BEGIN EXP_REG;
			expreg=yytext;
		}



<BLOC3>[^.\n]* 	{	//copie dans une file
			return codeC;
		}

%%

int
yyerror ( char* message )
{
	fprintf ( stderr, "Erreur d'analyse : %s [%s]\n", message, yytext );
}
